草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - 如何为采用 STL 容器迭代器的函数提供函数签名?

我想写一个可以这样调用的函数my_func,但不关心v是一个std::vector,它可以是任何STL容器。有点像std::for_each:std::vectorv={...};my_func(v.begin(),v.end());但我无法弄清楚函数签名。voidmy_func(???i1,???i2){std::for_each(i1,i2,...);//dumbexampleimplementation}我不擅长模板编程,所以即使查看std::for_each的函数声明也无济于事。是否有一个简单的实现,或者这是否会从根本上弄乱模板变量? 最佳答案

c++ - std::list 迭代器:获取下一个元素

我正在尝试使用存储在std::list中的数据元素构建一个字符串,我希望逗号只放在元素之间(即,如果列表中的元素是{A,B,C,D},结果字符串应为“A、B、C、D”。此代码无效:typedefstd::list>DataItemList;//...std::stringCompose(DataItemList&dilList){std::stringstreamssDataSegment;for(iterItems=dilList.begin();iterItems!=dilList.end();iterItems++){//Lookaheadinlisttoseeifnextele

c++ - 停留在 Trie 的迭代器实现上

我必须实现一个自制的Trie,但我被困在迭代器部分。我似乎无法弄清楚trie的增量方法。我希望有人能帮我解决问题。这是迭代器的代码:templateclassTrie::IteratorPrefixe{friendclassTrie;public:IteratorPrefixe():tree(NULL),currentNode(NULL),currentKey(""){};pairoperator*(){returnmake_pair(currentKey,currentNode->element);};IteratorPrefixeoperator++()throw(runtime_

c++ - 生成具有迭代器行为的仿函数

我有一个问题,很可能以前有人这样问过,因为我认为我想要的是相当多的人想要的东西。但是我想不出任何表达它的方式来返回我在搜索中想要的东西(不是谷歌,不是这里)。所以也许这里的答案只是一个用来描述我的意思的术语。我想要实现的是大致执行以下操作的内容:它可以采用仿函数结构/类并生成一系列值对于基于仿函数函数的所述仿函数。应该可以使用有状态的仿函数,即应该可以在状态a中实例化一个仿函数并让它运行直到它处于状态b,生成值的范围{f(a),f(a+1),...,f(b)},其中f(a+1)表示f所代表的系列中的下一项。它的行为类似于迭代器,即它可以代替迭代器传递,例如用值填充vector。我认为名

c++ - 迭代多个 std::vector

我在这里和其他地方读到,当使用索引迭代std::vector时,你应该:std::vectorx(20,1);for(std::vector::size_typei=0;i但是如果您要迭代两个不同类型的vector会怎样:std::vectorx(20,1);std::vectory(20,1.0);for(std::vector::size_typei=0;i假设安全吗std::vector::size_type与属于同一类型std::vector::size_type?仅使用std::size_t是否安全?? 最佳答案 是的,对

c++ - 我怎样才能制作自己的惰性迭代器?

我正在制作一个生成大量数据的C++11类。该数据当前来自数据库,不能完全放入内存中。我想为用户提供一个行为类似于常规STL迭代器的迭代器,但那样会很懒惰。更准确地说,我将能够做这样的事情:for(auto&item:big_bunch_of_data){do_stuff_with(item);}只有在每次迭代时才从数据库中检索项目。如果我是对的,这个新语法就是for(stuff::iteratorit=big_bunch_of_data.begin();it!=big_bunch_of_data.end();it++){do_stuff_with(*it);}这是否意味着通过提供beg

c++ - 下标迭代器中的 lambda

在下标运算符中使用lambda似乎不适用于g++和clang。这是实现错误还是c++标准中的“不愉快”规则?例子:classA{public:templatevoidoperator[](T){}templatevoidoperator()(T){}};intmain(){Aa;a[[](){}];//didnotcompiler:seeerrormessagea([](){});//worksasexpected}错误:main.cpp:13:6:error:twoconsecutive'['shallonlyintroduceanattributebefore'['tokena[[

c++ - 集合中的迭代器如何工作

我想知道在C++的STL中设置的迭代器是如何工作的。我猜该集合是使用二叉搜索树实现的,这意味着迭代器会按顺序遍历这棵树。但我的问题是,他们什么时候进行这种遍历,在一开始当我们喜欢它=s.begin()并将遍历的指针存储在内部堆栈中,并在迭代器中的每个增量上仅引用此数据结构或者迭代器中的增量对树进行新的中序遍历。我的意思是当我们初始化时sets;set::iteratorit;//andthenuseitlike:for(it=s.begin();it!=s.end();){dosth();++it;//doesthisdoainordertraversalofthetreeagaint

c++ - 如何在迭代器位置后插入元素

std::list.insert在迭代器位置之前插入一个元素。如何在迭代器位置后插入元素。 最佳答案 这就是list::insert所做的。在插入你的值之前增加你的迭代器:if(someIterator!=someList.end()){someIterator++;}someList.insert(someIterator,someValue); 关于c++-如何在迭代器位置后插入元素,我们在StackOverflow上找到一个类似的问题: https://

c++ - 现代编译器能否展开使用开始和结束迭代器表示的 `for` 循环

考虑以下代码vectorv;//fillvconstvector::iteratorend=v.end();for(vector::iteratori=v.bgin();i!=end;++i){//dostuff}g++、clang++、icc等编译器是否能够像这样展开循环。不幸的是,我不知道程序集是否能够从输出中验证循环是否展开。(而且我只能访问g++。)在我看来,这似乎需要代表编译器比平时更聪明,首先推断迭代器是随机访问迭代器,然后计算出循环执行的次数。启用优化后,编译器可以执行此操作吗?感谢您的回复,在你们中的一些人开始讲授过早优化之前,这是一个出于好奇的练习。